package com.shujia.wyh.day01;

/*
        java针对整数常量提供了4种表现形式：
        二进制  由 0，1组成  逢2进1  以0b开头    0b11001010
        八进制  由 0，1，2，3，4，5，6，7组成  逢8进1  以0开头
        十进制  由 0，1，2，3，4，5，6，7，8，9组成  逢10进1  java种整数默认写出来的表现形式就是10进制  100
        十六进制  由0，1，2，3，4，5，6，7，8，9，a，b,c,d,e,f组成  逢16进1  以0x开头

        注意：在IDEA种看到的结果是转化成十进制后的结果
        学习进制之间的转换：
            1、如何从其他进制转化成十进制
                十进制：12345 = 10000+2000+300+40+5                            十进制：12345
                             = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
                             = 10000 + 2000 + 300 + 40 + 5
                             = 12345
                规律：系数*待转换的进制数^幂次方之和
            2、如何从十进制转其他进制？
                规律：除基取余，直到商为0，余数反转
                举例：十进制：20--->二进制：0b10100
            3、如何从其他进制到其他进制？
                二进制到八进制？
                    1）二进制--->十进制--->八进制
                    2）拆分组合法：
                        二进制-->八进制：从右往左，每三位一组合，左边不够的时候用0补齐，计算每一个组合的十进制值，将结果拼起来即可
                        二进制-->十六进制：从右往左，每四位一组合，左边不够的时候用0补齐，计算每一个组合的十进制值，将结果拼起来即可

        我们今后接触最多的是二进制和十进制之间的转换。
        二进制和十进制之间的快速转换：8421码
        一个字节8位：将每一位假设都是1
        1   1   1   1   1   1   1   1
        128  64 32  16  8   4   2   1

        二进制的：11010100  --> 128+64+16+4 =


        求：-7+2
        计算机中不仅可以表示正的整数还可以用二进制表示负的整数，计算机中所有的整数运算都是采用二进制补码的形式，控制台看到的结果是原码转成10进制后的结果
             符号位              数值位
        7：    0                0000111
        -7：   1                0000111

             符号位              数值位
        原码： 1                0000111
        反码：正数的反码与原码一致，负数反码符号位不变，数值位按位取反
              1                1111000
        补码：正数的补码和原码一样，负数的补码在反码的基础之上末位+1
              1                1111001

        -7的补码：11111001
        2的补码： 00000010
        ------------------
        补码：   1      1111011
        反码：   1      1111010
        原码：   1      0000101  --->将数值位转10进制：-5





 */
public class ConstantDemo2 {
    public static void main(String[] args) {
        System.out.println(0b100); //二进制：100=> 1*2^2 + 0*2^1 + 0*2^0    十进制：4
        System.out.println(0100); //八进制：100=> 1*8^2 + 0*8^1 + 0*8^0     十进制：64
        System.out.println(100);
        System.out.println(0x100);
    }
}
